/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.skycode.tuto.manager;

import com.skycode.cnx.Conexion;
import com.skycode.tuto.dto.MonitorDto;
import com.skycode.tuto.dto.MonitorPdfDto;
import com.skycode.tuto.dto.MonitorVideoDto;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class MonitorManager implements Serializable {

    private final String url = "/pages/tutorial/monitor/monitor.xhtml";
    private final String urlLista = "/pages/tutorial/monitor/listaMonitores.xhtml";
    private final String urlVideo = "/pages/tutorial/monitor/video.xhtml";
    private final String urlPdf = "/pages/tutorial/monitor/pdf.xhtml";

    public MonitorDto inicializar() {
        MonitorDto dto = new MonitorDto();
        dto.setNombre("");
        dto.setDescripcion("");
        dto.setListaPdfs(new ArrayList<MonitorPdfDto>());
        dto.setListaVideos(new ArrayList<MonitorVideoDto>());
        dto.setFechaCreacion(obtenerFechaActual());
        return dto;
    }

    public String obtenerFechaActual() {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        return sdf.format(calendar.getTime());
    }

    public List<MonitorDto> listarTodos() {
        List<MonitorDto> lista = new ArrayList<MonitorDto>();
        try {
            Connection cnx = Conexion.getConexionOracle();
            String query = "select * from JTUTO_MONITOR";
            PreparedStatement ps = cnx.prepareStatement(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                MonitorDto monitorDto = new MonitorDto();
                monitorDto.setId(rs.getLong(1));
                monitorDto.setNombre(rs.getString(2));
                monitorDto.setDescripcion(rs.getString(3));
                monitorDto.setFechaCreacion(rs.getString(4));
                monitorDto.setListaVideos(obtenerListaVideos(monitorDto.getId()));
                monitorDto.setListaPdfs(obtenerListaPdfs(monitorDto.getId()));
                lista.add(monitorDto);
            }
            cnx.close();
            ps.close();
            rs.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return lista;
    }        

    private List<MonitorVideoDto> obtenerListaVideos(Long id) {
        List<MonitorVideoDto> lista = new ArrayList<MonitorVideoDto>();
        MonitorVideoManager monitorVideoManager = new MonitorVideoManager();
        lista = monitorVideoManager.obtenerTodosPorId(id);
        System.out.println("LOS ID DE LA LISTA DE MONITOR VIDEO SON: ");
        for (MonitorVideoDto x: lista) {
            System.out.println("ID: " + x.getId());
        }
        lista = monitorVideoManager.obtenerDetalles(lista);
        return lista;
    }

    private List<MonitorPdfDto> obtenerListaPdfs(Long id) {
        List<MonitorPdfDto> lista = new ArrayList<MonitorPdfDto>();
        MonitorPdfManager monitorPdfManager = new MonitorPdfManager();
        lista = monitorPdfManager.obtenerTodosPorId(id);

        return lista;
    }

    public MonitorDto obtenerPorIdNoLista(Long id) {
        MonitorDto monitorDto = new MonitorDto();
        try {
            Connection cnx = Conexion.getConexionOracle();
            String query = "select * from JTUTO_MONITOR where ID = " + id;
            PreparedStatement ps = cnx.prepareStatement(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                monitorDto.setId(rs.getLong(1));
                monitorDto.setNombre(rs.getString(2));
                monitorDto.setDescripcion(rs.getString(3));
                monitorDto.setFechaCreacion(rs.getString(4));                
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return monitorDto;
    }

    public MonitorDto obtenerPorId(Long id) {
        MonitorDto monitorDto = new MonitorDto();
        try {
            Connection cnx = Conexion.getConexionOracle();
            String query = "select * from JTUTO_MONITOR where ID = " + id;
            PreparedStatement ps = cnx.prepareStatement(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                monitorDto.setId(rs.getLong(1));
                monitorDto.setNombre(rs.getString(2));
                monitorDto.setDescripcion(rs.getString(3));
                monitorDto.setFechaCreacion(rs.getString(4));
                monitorDto.setListaVideos(obtenerListaVideos(monitorDto.getId()));
                monitorDto.setListaPdfs(obtenerListaPdfs(monitorDto.getId()));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return monitorDto;
    }

    public List<MonitorDto> obtenerMonitores(MonitorDto dto) {
        List<MonitorDto> lista = new ArrayList<MonitorDto>();
        try {
            Connection cnx = Conexion.getConexionOracle();
            String query = "select * from JTUTO_MONITOR where ID = ID";
            if (dto.getId() != null) {
                query += " and ID = " + dto.getId();
            } else {
                if (dto.getDescripcion() != null && dto.getDescripcion().length() > 0) {
                    query += " and DESCRIPCION like '" + dto.getDescripcion() + "'";
                }

            }
            PreparedStatement ps = cnx.prepareStatement(query);
            ResultSet rs = ps.executeQuery(query);
            while (rs.next()) {
                MonitorDto monitorDto = new MonitorDto();
                monitorDto.setId(rs.getLong(1));
                monitorDto.setNombre(rs.getString(2));
                monitorDto.setDescripcion(rs.getString(3));
                monitorDto.setFechaCreacion(rs.getString(4));
                monitorDto.setListaVideos(obtenerListaVideos(monitorDto.getId()));
                monitorDto.setListaPdfs(obtenerListaPdfs(monitorDto.getId()));
                lista.add(monitorDto);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return lista;

    }

    public void guardar(MonitorDto dto) {
        try {
            Connection cnx = Conexion.getConexionOracle();
            String query = "INSERT INTO JTUTO_MONITOR VALUES (?,?,?,?)";
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setLong(1, generarId(dto));
            ps.setString(2, dto.getNombre());
            ps.setString(3, dto.getDescripcion());
            ps.setString(4, dto.getFechaCreacion());
            ps.executeQuery();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public Long generarId(MonitorDto dto) {
        Long maxId = 0L;
        List<MonitorDto> lista = listarTodos();
        if (lista != null && lista.size() > 0) {
            for (MonitorDto x : lista) {
                if (x.getId().compareTo(maxId) > 0) {
                    maxId = x.getId();
                }
            }
            maxId = maxId + 1;
        } else {
            maxId = 100L;
        }
        return maxId;
    }

    public String getUrl() {
        return url;
    }

    public String getUrlLista() {
        return urlLista;
    }

    public String getUrlVideo() {
        return urlVideo;
    }

    public String getUrlPdf() {
        return urlPdf;
    }
}
